ALGORITMO Y ESTRUCTURA DE DATOS II

 

TDE ES EI CB Formulario CF EM Ejemplo Salir

Controles Básicos

 

Introducción al uso de controles

 

Los controles son objetos que disponen de sus propias propiedades y métodos, y cuya utilidad es la de facilitarnos el desarrollo de nuestras aplicaciones. Lo único que tendremos que hacer es modificar sus propiedades (tamaño, color, etc..) para incorporarlos en nuestros programas y asociarles el código necesario para que se comporten como esperamos al ejecutar la aplicación.

 

Por ejemplo, el botón Aceptar que encontramos en multitud de programas es un control.

 

Antes de empezar a conocer los controles básicos veamos cuales son sus características generales:

 

·       Propiedades: Todos los controles disponen de una serie de propiedades las cuales podemos cambiar al incluirlos en nuestras aplicaciones. Ejemplos de propiedades son el color, el tipo de letra, el nombre, el texto, etc...

 

·       Métodos: Son procedimientos asociados a los controles, es decir, rutinas ya establecidas que podemos invocar desde nuestras aplicaciones para que se realice alguna operación sobre el control. Por ejemplo el control ListView (la lista de archivos que aparece en el explorador de Windows) dispone del método Order que te ordena los datos aparecidos en la lista.

 

·       Eventos: Son acciones que pueden ser motivadas por el propio usuario o por el mismo sistema operativo. Ejemplos pueden ser el movimiento del ratón o hacer click sobre un botón. No necesitamos detectar cuando se ha producido un evento determinado, Windows lo detecta automáticamente. Los eventos ya están definidos, son bastantes y cada control cuenta con los suyos propios, aunque son muy parecidos. Lo único que tendremos que hacer es asociar el código necesario al evento que necesitemos tratar.

 

   La ventana donde aparecen los controles que Visual Basic carga por defecto nada más arrancar la aplicación aparece en la figura adjunta. Moviendo el ratón por encima de cualquier control aparecerá un ‘ToolTipText’ indicándonos el control de que se trata.

 

   Cuando vayamos a utilizar un control en nuestro formulario, tendremos que darle un nombre. Aunque podemos poner el nombre que deseemos a un control, el nombre que le demos deberá estar relacionado con la función que realizará el control; además, es conveniente que indique el tipo de control de que se trata. Existe una convención ampliamente aceptada que es la siguiente: se utilizan siempre tres letras minúsculas que indican el tipo de control, seguidas por otras letras (la primera mayúscula, a modo de separación) libremente escogidas por el usuario, que tienen que hacer referencia al uso que se va a dar a ese control. La tabla siguiente muestra las abreviaturas de los controles más usuales, junto con la nomenclatura inglesa de la que derivan:

                  

      cmb      ComboBox

      chk       CheckBox

      cmd      CommandButton

      frm        Form

      fra         Frame

      img       Image

      lbl         Label

      lin         Line

      mnu      Menu

      opt        OptionButton

      pic        PictureBox

      shp       Shape

      txt         TextBox

      tmr        Timer

 

    Así por ejemplo, el botón Aceptar que comentamos antes podría tener en el formulario el nombre  cmdAceptar.

 

Controles básicos

 

Hay una serie de propiedades que son comunes a la mayoría de los controles. Son las siguientes:

 

Name: es el nombre con el que se conocerá el control cuando lo utilicemos en el código. En un mismo formulario no puede haber 2 controles con el mismo nombre. Conviene poner un nombre que represente la función que tiene el control en la aplicación para que el código quede más claro.

 

Alignment: alineación que tendrá el texto dentro del control: izquierda, centro o derecha.

 

Appearance: aspecto del control: 3D o plano.

 

BackColor: color del fondo del control.

 

BorderStyle: es el tipo de contorno para el control, el estilo del borde.

 

Caption: Es el texto que contendrá el control. Esta propiedad no existe en el control TextBox.

 

Enabled: establece si un control está habilitado para su modificación por parte del usuario o no. Si un control no está habilitado, es decir, tiene la propiedad Enabled establecida en False, su color aparece un poco difuminado para indicar que no se puede utilizar ese control en ese momento. En la figura anterior podemos ver un menú con una opción habilitada y dos deshabilitadas.

 

Font: tipo y tamaño de letra que usa el control.

 

ForeColor color de la letra del control.

 

Heigth: altura del control.

 

Left: distancia entre el borde izquierdo de un objeto y el borde izquierdo de su contenedor.

 

TabIndex: es el orden que ocupa el control cuando se va pasando de uno a otro mediante la tecla  tabulador.

 

ToolTipText: Aquí indicaremos el texto que se mostrará cuando el ratón se sitúe sobre el control. Este texto puede servir de aclaración o ayuda sobre la función de dicho control. En la figura adjunta podemos ver el ToolTipText que aparece al dejar el puntero del ratón sobre el botón Abrir.

 

Top: distancia entre el borde superior de un objeto y el borde superior de su contenedor.

 

Visible: Devuelve o establece un valor que determina si el control es visible. Por ejemplo para ocultar un control podemos establecer el valor de esta propiedad a False.

 

Width: anchura del control.

 

 

TextBox  

Mediante este control podremos realizar tanto la entrada como la salida de datos en nuestras aplicaciones. Las propiedades de las que dispone el control (además de las generales de todos los controles) son las siguientes:

 

CausesValidation: Esta propiedad sirve para indicar si queremos que al abandonar el control se genere un evento Validate. Desde el método correspondiente a dicho evento se deberá comprobar el valor introducido en el TextBox, permitiéndose así o no la salida. Esta propiedad podrá tener el valor True o False.

 

MaxLength: número de caracteres máximo que puede contener el texto introducido en el TextBox. Cuando estamos introduciendo texto y llegamos al máximo nos alerta con un pitido.

 

MultiLine: permite que el control tenga varias líneas de edición. Esta propiedad podrá tener el valor True o False.

 

Locked: Si está con valor True bloquea el control, es decir, el usuario no puede introducir ni modificar el texto que contenga. Nos puede servir para utilizar el control como salida de datos sin que el usuario pueda modificarlos por error.

 

Text: Es la propiedad equivalente a Caption en los demás controles. Aquí indicamos el texto que aparecerá en el control. Podemos asignarle cualquier texto en el momento de diseñar el programa o durante la ejecución del mismo. También podemos leer el texto que haya introducido el usuario para tratarlo durante la ejecución del programa.

 

Label       

Su utilidad queda restringida a la visualización de datos en el programa, no permitiendo la introducción de datos por parte del usuario. Este control sirve para mostrar mensajes en nuestro formulario que orienten al usuario sobre la utilidad de los demás controles que tengamos en la aplicación o para indicarnos acciones que podemos realizar. Sus propiedades son las comunes a los demás controles, aunque podemos mencionar aquí la propiedad

 

AutoSize: Hace que el tamaño de la etiqueta se ajuste automáticamente a la longitud del texto que contiene.

Para este control no se suelen utilizar los eventos ya que su contenido suele cambiar poco a lo largo de la ejecución de la aplicación. A este control no se le puede dar el enfoque (al pulsar la tecla tabulador nunca nos podremos colocar sobre este control).

 

 

 


Antes de seguir comentando otros controles, podemos ver en la figura siguiente algunos de ellos.

 

  CommandButton   

 

Este control es el típico botón que aparece en todas las aplicaciones y que al hacer click sobre él nos permite realizar alguna operación concreta. Según el código que le asociemos podremos realizar las operaciones que queramos. El evento por excelencia de este control es click. Sus propiedades son:

 

Cancel: si esta propiedad tiene el valor True quiere decir que se trata del botón de cancelación. Ello implica que al pulsar la tecla Escape se ejecutará el código asociado al evento click de dicho botón, independientemente de donde se encuentre el foco en ese momento.

 

Default: si esta propiedad tiene el valor True quiere decir que se trata del botón por defecto. Ello implica que al pulsar la tecla Intro se ejecutará el código asociado al evento click de dicho botón, independientemente de donde se encuentre el foco en ese momento.

 

Picture: Podemos escoger una imagen que aparecerá sobre el botón.

 

DisablePicture: es la imagen que se mostrará en el botón cuando éste se encuentre deshabilitado, es decir, cuando su propiedad Enabled sea False.

 

DownPicture: imagen que mostrará el botón cuando esté pulsado.

 

NOTA: Para poder utilizar las tres propiedades anteriores es necesario que la propiedad Style esté en el valor Graphical; en caso contrario el botón no podrá contener dibujos.

 

Style: Esta propiedad puede tomar dos valores: Standard o Graphical.

 

Value: dando a esta propiedad desde el código del programa el valor True, se generará el evento Click. Por lo tanto se trata de una forma de activar el botón desde el código, igual que si se hubiese pulsado el ratón o el teclado.

 

CheckBox    

 

El control CheckBox es una casilla de verificación en la que únicamente cabe la posibilidad de que se encuentre marcada o desmarcada. Su principal propiedad es:

 

Value: el valor será Checked cuando la casilla de verificación se encuentre marcada y Unchecked cuando esté desmarcada.

 

OptionButton    

 

Este control nos permite elegir una opción entre varias de las que se nos plantean. Cada opción será un control OptionButton diferente. Observa la figura del ejemplo de más abajo. De todas las opciones que se nos ofrece, sólo podremos activar una. Si activamos cualquier otra opción, se desactivará automáticamente la última que teníamos activada.

 

El marco que está alrededor de los 6 controles OptionButton se trata del control Frame , es opcional, aunque es conveniente colocarlo siempre que hagamos uso de las opciones. No sólo por motivos de presentación sino porque de esta manera podremos establecer grupos de controles OptionButton independientes en los que en cada grupo sólo pueda haber una opción activada a la vez. También, al mover el marco se moverán los controles incluidos en él facilitándonos las modificaciones.

 

Para que los controles OptionButton queden englobados dentro de un control Frame, primero tendremos que colocar el control Frame en el formulario con el tamaño adecuado y después ir colocando los controles Optionbutton dentro del FrameDel control Frame la única propiedad que nos interesará es Caption, que es el texto que aparecerá en el encabezado.

 

La propiedad más importante del control OptionButton es

 

Value: Es el valor que tendrá el control: True si se encuentra activado y False si no lo está.

No se suele asociar código a los eventos de este tipo de controles, sino únicamente conocer el valor que tienen: True o False.

 

EJEMPLO

Para practicar vamos a realizar una aplicación que consistirá en realizar con 2 números que introduzcamos, una operación que seleccionemos y mostrar el resultado. El formulario donde estarán todos los controles es el que aparece en la figura adjunta.

 

La propiedad Caption de cada uno de los controles es la que se muestra en el formulario.

 

Se ha modificado la propiedad Name de cada control para que al utilizarlos desde el código sepamos cual es el control con el que trabajamos:

 

  • Los controles TextBox tienen los nombres: Num1Num2 y Resul.

  • Los controles Optionbutton tienen cada uno de ellos el mismo nombre que su caption

  • Los controles CommandButton tienen los nombres: CalcularLimpiar y Salir.

  • A los controles Label y al Frame no hace falta cambiarles el nombre.

     Lo que habrá que hacer ahora es asociar código a cada uno de los botones que es de donde se van a realizar las operaciones:

  • Para el botón Calcular, que es el que nos mostrará el resultado según la operación seleccionada, hemos utilizado la instrucción If Then Else.

 

Private Sub Calcular_Click()

Dim r, a, b As Double

a = Num1.Text

b = Num2.Text

r = 0

 

If suma.Value = True Then

  r = a + b

ElseIf resta.Value = True Then

  r = a – b

ElseIf producto.Value = True Then

  r = a * b

ElseIf division.Value = True Then

  r = a / b

ElseIf potencia.Value = True Then

  r = a ^ b

End If

 

Resul.Text = r

End Sub

 

·       El botón Limpiar Datos nos va a servir para borrar los datos introducidos por el usuario y el resultado preparando. El código que tendremos que introducir es el siguiente:

 

Private Sub Limpiar_Click()

Num1.Text = “”

Num2.Text = “”

Resul.Text = “”

End Sub

 

·       El botón Salir únicamente contendrá la sentencia End.

 

Private Sub Salir_Click()

End

End Sub

 

Nota: el comando End hace que un programa finalice.

 

 

Image       

Este control lo utilizaremos cuando necesitemos visualizar una imagen en nuestro programa. Para ello haremos uso de las dos propiedades siguientes:

 

Picture: determina la imagen que se debe mostrar en el control. Esta propiedad contendrá la dirección del archivo donde está almacenada la imagen. Si la imagen ha de cargarse en tiempo de ejecución, habrá que hacer uso de la función LoadPicture de la siguiente forma:

 

Image1.Picture = LoadPicture("c:\mis documentos\dibujo.bmp")

 

Stretch: si esta propiedad está establecida a False, el control se redimensionará al cargar la imagen, adaptándose al tamaño de esta. Si el valor es True, será la imagen la que se adapte al tamaño del control.

 

 

PictureBox     

 

El control cuadro de imagen es como un control Image ampliado; además de poder visualizar imágenes nos permite dibujar puntos, líneas, rectángulos, círculos, etc... Dentro de él pueden colocarse incluso otro tipo de controles. Las propiedades más importantes son:

 

Picture: determina la imagen que se debe mostrar en el control.

 

AutoSize: automatiza el tamaño del control a la imagen, es decir, aquel se ajustará al tamaño de la imagen que ha de contener.

 

FillColor: Color que se utilizará como relleno cuando se dibujen formas en el formulario utilizando los métodos Line o Circle.

 

FillStyle: Tipo de relleno que se dará a las formas que se dibujen en el formulario utilizando los métodos Line o Circle.

 

Existen una serie de métodos que nos van a permitir realizar determinados dibujos dentro de un PictureBox. Son los siguientes:

 

Pset (x, y), color       Dibuja un punto en la posición dada por las coordenadas X e Y. El color vendrá dado por el valor de la variable color.

 

Line (x, y) - (z, w), color         Dibuja una línea entre los puntos (X, Y) y (Z, W) con el color especificado.

 

Line (x, y) - (z, w), color, B    Dibuja un rectángulo cuyas esquinas superior izquierda e inferior derecha serán respectivamente los puntos de coordenadas (X, Y) y (Z, W). El color del borde está dado por el valor de color.

 

Circle (x, y), radio, color         Dibuja un círculo con centro el punto (X, Y).

 

Cls                                          Borra el contenido del PictureBox.

 

Todos los métodos anteriores funcionan igualmente sobre el formulario. Si queremos que los dibujos se realicen sobre un PictureBox tendremos que anteponer el nombre de este antes de todos los métodos, separados por un punto.

 

En aquellos en los que sea posible, el tipo de relleno y el color del mismo estarán determinados por los atributos establecidos en FillStyle y en FillColor. El estilo de las líneas (continuas, discontinuas) y su grosor se establecen mediante las propiedades DrawWidth y DrawStyle.

 

El siguiente ejemplo hace uso de uno de estos métodos.

 

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _

                          X As Single, Y As Single)

    If Button = 1 Then

          PSet (X, Y), vbBlue

    Endi if

End Sub

 

El ejemplo anterior irá pintando de color azul aquellos puntos por los que vaya pasando el ratón, siempre que tengamos pulsado el botón primario del mismo. Esto es así porque la condición If hace que el método Pset sólo se ejecute si la variable Button (variable que determina que botón del ratón está pulsado en cada momento) vale 1. El valor de Button será 0 si no se encuentra pulsado ningún botón, 1 si el botón pulsado es el primario y 2 si es el secundario.

 

 

Line      y   Shape   

Estos dos controles son de los más simples que podemos encontrar en Visual Basic. Se utilizan para dibujar líneas el primero de ellos y para dibujar distintas figuras o polígonos el segundo. Son controles estáticos, pues no pueden responder a ningún tipo de evento. Las propiedades características a ambos controles son:

 

BorderColor: color de la línea o color del borde que delimita la figura.

BorderStyle: estilo de la línea o del borde: continuo, discontinuo, etc...

BorderWidth: anchura de la línea o del borde de la figura.

Además de estas, hay otras propiedades características de cada control. Las propias del control Line son:

X1, X2, Y1, Y2: Estas cuatro coordenadas determinan los puntos origen y final de la línea. Recordar que en informática el origen de coordenadas se corresponde con la esquina superior izquierda.

El control Shape tiene estas propiedades características:

FillColor: color de relleno de la figura.

FillStyle: el valor de esta propiedad determinará el tipo de relleno que tendrá la figura. Este puede ser sólido, transparente, con líneas horizontales, verticales, ...

 

Conviene recordar ahora que habíamos dicho que existían dos propiedades comunes a todos los controles que eran BackColor y BackStyle, y que tenían una función semejante a la que estamos describiendo para FillColor y FillStyle. Si en un Shape tenemos activadas las dos opciones, el color que prevalecerá como color de relleno será el que esté indicado en la propiedad FillColor.

 

Shape: propiedad cuyo valor sirve para especificar que figura se dibujará. Los valores posibles son 0 (rectángulo), 1 (cuadrado), 2 (óvalo), 3 (círculo), 4 (rectángulo redondeado) y 5 (cuadrado redondeado).

 

ComboBox     

 

Este control es una lista desplegable donde el usuario puede seleccionar una de las posibles opciones que aparecen cuando desplegamos la persiana.

 

El control ComboBox posee dos listas, una visible, que es la que se despliega, y otra no visible. La información de la lista visible se guarda en la propiedad List. El primer elemento de la lista está almacenado en la propiedad List(0), el segundo elemento en List(1) y así sucesivamente. El primer elemento de la lista tiene el subíndice 0. La propiedad ListCount contiene el número de elementos que existen en la lista desplegable. El último elemento de la lista tiene el subíndice ListCount – 1.

 

Como dijimos este control posee una lista adicional no visible. Los elementos de esta lista no visible se almacenan en la propiedad ItemData; ItemData(0) para el primero, ItemData(1) el segundo, etc. Esta propiedad solo admite números enteros.

Cuando hacemos clic sobre una de las opciones de la lista, se muestra en la ventana de control. La propiedad Text almacena el contenido de esa ventana; es decir, Text guarda la misma información que la propiedad List(n), donde n es el subíndice del elemento seleccionado. La propiedad ListIndex contiene el subíndice del elemento seleccionado, o sea n. Cuando la ventana superior de la persiana no contiene nada, la propiedad Text está vacia y ListIndex alamacena –1.

 

Si necesitamos que además la aplicación haga algo al seleccionar una opción de la lista, podemos programar el evento Click del control.

 

El método AddItem inserta un nuevo elemento en la lista. La propiedad NewIndex contiene el índice del último elemento que hemos insertado.

 

Como propiedades características de este elemento de control podemos destacar:

 

List: Podemos añadir los Items de la lista no en el momento de ejecución del programa, sino en el momento de su creación. Para ello accedemos a esta propiedad y vamos escribiendo los distintos elementos que queremos que salgan al desplegar la lista. Una vez escrito el primero de ellos, para seguir añadiendo elementos debemos pulsar Ctrl+Intro.

 

Sorted: permite especificar si los elementos de la lista aparecerán ordenados alfabéticamente.

Style:  existen tres posibles estilos para el ComboBox:

0 (Dropdown Combo)   Este estilo hace que el texto del ComboBox pueda seleccionarse de la lista o bien escribirse directamente sobre el mismo.

1 (Simple Combo)        No aparece la flecha que nos permite desplegar la lista, por lo que no podremos escoger los elementos de la misma. Simplemente se nos permitirá escribir directamente sobre el control como si se tratase de un control TextBox.

2 (Dropdown List)        No es posible escribir directamente sobre el control; únicamente pueden escogerse los elementos de su lista.

 

Timer      

 

Este control funciona de forma distinta a los demás pues no aparece en el formulario durante la ejecución del programa; sólo lo veremos en el proceso de diseño. Se utilizará cuando queramos que una o varias sentencias se ejecuten de forma repetida a lo largo del desarrollo del programa. La propiedad característica de este control es Interval. Esta contendrá el valor, en milisegundos, que especifica cada cuanto tiempo deben ejecutarse las sentencias incluidas en el código asociado al control. Para detener la ejecución del código asociado al control bastará con establecer el valor de la propiedad Interval a 0. Por ejemplo, si queremos que un programa emita un pitido cada segundo deberemos escribir el siguiente código

 

Private Sub tmrTemporizador_Timer()

    Beep

End Sub

 

además de tener la propiedad Interval del temporizador establecida en 1000.

 

 

HScrollBar y VscrollBar        

 

   Son las típicas barras de desplazamiento horizontal y vertical que aparecen en multitud de programas. Las propiedades a destacar de estas barras son:

 

Value: valor que indica la posición en la que se encuentra el indicador de desplazamiento de la barra. Este valor estará comprendido entre los valores Max y Min.

Max: valor máximo que podrá tomar la propiedad Value.

Min: valor mínimo que podrá tomar la propiedad Value.

SmallChange: esta propiedad indica cuantas unidades cambiará Value al hacer click en una de las flechas de los extremos de la barra de desplazamiento.

LargeChange: número de unidades que cambiará el valor de Value al hacer click dentro de la barra de desplazamiento.

 

Eventos

 

Los eventos son acciones que se pueden realizar en cualquier control: click, doble click, movimiento del ratón,… A estos eventos se les puede asociar código para que se ejecute al producir el evento. Los eventos más habituales son:

 

MouseMove: al mover el ratón por encima del control.

MouseDown: al pulsar cualquier botón del ratón.

MouseUp: al soltar cualquier botón del ratón.

Los tres eventos anteriores poseen los cuatro parámetros siguientes: Button, Shift, X e Y. Cada uno de ellos toma los siguientes valores:

                     Button:     toma el valor 0 si no se aprieta ningún botón del ratón, el valor 1 si el botón que se aprieta es el primario, el valor 2 si el botón pulsado es el secundario y 4 si se pulsa el botón central del ratón.

                         Shift:     nos indica si al pulsar el ratón teníamos pulsada alguna de las teclas Shift, Ctrl, Alt o AltGr. Sus posibles valores son los siguientes:

0          si no está pulsada ninguna de estas teclas,

1          está pulsada la tecla Shift,

2          está pulsada la tecla Ctrl,

4                    pulsada la tecla Alt,

6          pulsada la tecla AltGr.

                      X e Y:     guardan el valor de las coordenadas X e Y en las que se encontraba el puntero del ratón en el momento de producirse el evento.

 

   Veamos un ejemplo del uso de uno de estos controles:

 

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = 1 Then

Print "Has pulsado el botón primario en la posición " & X & ", " & Y

         ElseIf Button = 2 Then

Print "Has pulsado el botón secundario en la posición " & X & ", "& Y

Else

Print "Has pulsado el botón central en la posición " & X & ", " & Y

       End If

End Sub

 

 

Si pulsamos uno de los botones del ratón, el programa imprimirá en pantalla cual de ellos era y la posición en la que lo hemos hecho.

 

Change: al cambiar el contenido del control, por ejemplo al escribir algo en un TextBox.

Click: al hacer click con el botón izquierdo del ratón sobre el control.

DblClick: al hacer doble click con el con el botón izquierdo del ratón sobre el control.

KeyDown: al presionar una tecla en el teclado. Este evento tiene dos parámetros: KeyCode, que se corresponde con un código numérico que dependerá de la tecla pulsada, y Shift , que valdrá 1 o 0 dependiendo respectivamente de si se encuentra pulsada o no la tecla Shift.

 

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

    Print KeyCode, Shift

End Sub

 

KeyUp: semejante al anterior, salvo que este evento se genera al soltar la tecla que teníamos presionada.

KeyPress: al pulsar una tecla del teclado y mantenerla pulsada. Es un evento parecido a KeyDown, aunque dispone de un solo parámetro, KeyAscii. Este parámetro es particular de cada carácter, y es un número entre 0 y 255 que nos informa del carácter pulsado. (Aunque parezca igual que el parámetro KeyCode del evento KeyDown, no son lo mismo. KeyAscii diferencia entre pulsar “a” o pulsar “A”, mientras que KeyCode no). El siguiente ejemplo imprime el carácter pulsado.

 

Private Sub Form_KeyPress(KeyAscii As Integer)

    Print Chr(KeyAscii)

End Sub

 

Gotfocus: este evento se activa cuando el control recibe el enfoque, es decir, cuando se activa el control en tiempo de ejecución para introducir datos en él o realizar alguna operación.

 

Lostfocus: Es el contrario del anterior evento, se activa cuando el control pierde el enfoque, es decir, se pasa a otro control para seguir introduciendo datos.

 

 

Volver